import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

/**
 * @作者: xiaoxun
 * @日期: 2025/3/13 12:03
 * @描述: 多线程
 */
public class MultiThreadDemo01 {
	public static void main(String[] args) throws ExecutionException, InterruptedException {
		/**
		 * 什么是线程？
		 * 	线程（Thread）是一个程序内部的一条执行流程
		 * 	程序中如果只有一条执行流程，那这个程序就是单线程的程序
		 * 	什么是多线程？
		 * 		多线程是指从软硬件上实现的多条执行流程的技术（多条线程由CPU负责调度执行）
		 * 	多线程的好处：
		 * 			*/
		//1、创建多线程,方式一
		Thread myThreat=new MyThreat();
		myThreat.start();
		for (int i = 0; i <5 ; i++) {
			System.out.println("主线程输出"+i);
		}
		System.out.println(myThreat.getName());
		System.out.println(Thread.currentThread());
		//2、创建多线程,方式二
		Runnable myRunThr=new myRunnable();
		Thread t=new Thread(myRunThr);
		t.start();
		//3、创建多线程,方式三
		Runnable run=new Runnable() {
			@Override
			public void run() {
				for (int i = 0; i <5 ; i++) {
					System.out.println("匿名线程输出"+i);
				}
			}
		};
		Thread t1=new Thread(run);
		t1.start();
		//=======================================
		Callable<String> call=new myCallable(100);
		FutureTask<String> task=new FutureTask<>(call);
		Thread t3=new Thread(task);
		t3.start();
		task.get();
		System.out.println(task.get());

	}
}
//1、创建多线程,方式一
class MyThreat extends Thread{
	//重写run方法
	@Override
	public void run() {
		//run（）是声明线程要干的事情
		for (int i = 0; i <5 ; i++) {
			System.out.println("子线程输出"+i);
		}
	}
}
//2、创建多线程,方式二
class  myRunnable implements Runnable{
	@Override
	public void run() {
		for (int i = 0; i <5 ; i++) {
			System.out.println("Runnable线程输出"+i);
		}
	}
}
//3、创建多线程,方式三
class myCallable implements Callable<String>{
	private int n;
	public myCallable(int n){
		this.n=n;
	}
	@Override
	public String call() throws Exception {
		int sum=0;
		for (int i = 0; i < n; i++) {
			sum+=n;
		}
		return "call线程1到"+n+"的累加和是："+sum;
	}
}